Telegram Group & Telegram Channel
🖥 Задача (с подвохом). Какой результат выдаст этот код?

def extend_list(val, lst=[]):
lst.append(val)
return lst

# Первый вызов: используется список по умолчанию
list1 = extend_list(10)
# Второй вызов: передаём новый пустой список
list2 = extend_list(123, [])
# Третий вызов: снова используется список по умолчанию
list3 = extend_list('a')

print('list1 =', list1)
print('list2 =', list2)
print('list3 =', list3)

🧩 Объяснение

Как работает список по умолчанию
В объявлении функции lst=[] создаётся один список при определении функции, и он используется повторно во всех вызовах, где аргумент lst не передан.

Первый вызов

list1 = extend_list(10)
Параметр lst не передан → используется дефолтный список.

Добавляем 10.
В результате list1 становится [10].

Второй вызов

list2 = extend_list(123, [])
Передаём новый пустой список [].

В этот список добавляется 123.
В итоге list2 становится [123].

Третий вызов

list3 = extend_list('a')
Опять не передан lst → используется тот же дефолтный список, в который уже добавлен 10.

Добавляем 'a'.
Дефолтный список теперь [10, 'a'], и list3 ссылается на этот же список.

Окончательный вывод программы:

list1 = [10, 'a']
list2 = [123]
list3 = [10, 'a']

Обратите внимание, что list1 и list3 — это один и тот же дефолтный список, поэтому изменения сохраняются между вызовами.

@Python_Community_ru



tg-me.com/Python_Community_ru/2589
Create:
Last Update:

🖥 Задача (с подвохом). Какой результат выдаст этот код?

def extend_list(val, lst=[]):
lst.append(val)
return lst

# Первый вызов: используется список по умолчанию
list1 = extend_list(10)
# Второй вызов: передаём новый пустой список
list2 = extend_list(123, [])
# Третий вызов: снова используется список по умолчанию
list3 = extend_list('a')

print('list1 =', list1)
print('list2 =', list2)
print('list3 =', list3)

🧩 Объяснение

Как работает список по умолчанию
В объявлении функции lst=[] создаётся один список при определении функции, и он используется повторно во всех вызовах, где аргумент lst не передан.

Первый вызов

list1 = extend_list(10)
Параметр lst не передан → используется дефолтный список.

Добавляем 10.
В результате list1 становится [10].

Второй вызов

list2 = extend_list(123, [])
Передаём новый пустой список [].

В этот список добавляется 123.
В итоге list2 становится [123].

Третий вызов

list3 = extend_list('a')
Опять не передан lst → используется тот же дефолтный список, в который уже добавлен 10.

Добавляем 'a'.
Дефолтный список теперь [10, 'a'], и list3 ссылается на этот же список.

Окончательный вывод программы:

list1 = [10, 'a']
list2 = [123]
list3 = [10, 'a']

Обратите внимание, что list1 и list3 — это один и тот же дефолтный список, поэтому изменения сохраняются между вызовами.

@Python_Community_ru

BY Python Community




Share with your friend now:
tg-me.com/Python_Community_ru/2589

View MORE
Open in Telegram


Python Community Telegram | DID YOU KNOW?

Date: |

Why Telegram?

Telegram has no known backdoors and, even though it is come in for criticism for using proprietary encryption methods instead of open-source ones, those have yet to be compromised. While no messaging app can guarantee a 100% impermeable defense against determined attackers, Telegram is vulnerabilities are few and either theoretical or based on spoof files fooling users into actively enabling an attack.

To pay the bills, Mr. Durov is issuing investors $1 billion to $1.5 billion of company debt, with the promise of discounted equity if the company eventually goes public, the people briefed on the plans said. He has also announced plans to start selling ads in public Telegram channels as soon as later this year, as well as offering other premium services for businesses and users.

Python Community from de


Telegram Python Community
FROM USA